#include<iostream>
#include<string>
#include<unistd.h>
#include<pthread.h>

const int num=5;
pthread_mutex_t gmutex=PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t gcond=PTHREAD_COND_INITIALIZER;

void *Wait(void *args)
{
    std::string name=static_cast<const char*>(args);
    while (true)
    {
        pthread_mutex_lock(&gmutex);
        //条件等待
        pthread_cond_wait(&gcond,&gmutex);
        usleep(10000);
        std::cout<<"I am : "<<name<<std::endl;
        
        pthread_mutex_unlock(&gmutex);
        //usleep(100000);
    }
    
}

int main()
{
    pthread_t threads[num];
    for(int i=0;i<num;i++)
    {
        char *name=new char[1024];
        snprintf(name,1024,"thread-%d",i+1);
        pthread_create(threads+i,nullptr,Wait,(void *)name);
    }
    //唤醒线程
    while(true)
    {
        pthread_cond_signal(&gcond);   //一次唤醒一个线程
        //pthread_cond_broadcast(&gcond);   //一次唤醒多个线程
        std::cout<<"唤醒一个线程..."<<std::endl;
        sleep(2);
    }

    for(int i=0;i<num;i++)
    {
        pthread_join(threads[i],nullptr);
    }

    return 0;
}